Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


sbapp/mapview/source.py 4c8d17f4fbf0f51b2511a02e30b0dafbf1c7ab2e (4c8d17f4) Text, 5.18 KB

Te6edf3__all__ Tff7b72= Tb4b4b4[Ta5d6ff"Ta5d6ffMapSourceTa5d6ff"Tb4b4b4]

Tff7b72import T7ee787RNS
Tff7b72import T7ee787hashlib
Tff7b72from T7ee787math Tff7b72import Te6edf3atanTb4b4b4, Te6edf3ceilTb4b4b4, Te6edf3cosTb4b4b4, Te6edf3expTb4b4b4, Te6edf3logTb4b4b4, Te6edf3piTb4b4b4, Te6edf3tan

Tff7b72from T7ee787kivyT7ee787.T7ee787metrics Tff7b72import Te6edf3dp

Tff7b72from T7ee787mapviewT7ee787.T7ee787constants Tff7b72import Te6edf3CACHE_DIRTb4b4b4, Te6edf3MAX_LATITUDETb4b4b4, Te6edf3MAX_LONGITUDETb4b4b4, Te6edf3MIN_LATITUDETb4b4b4, Te6edf3MIN_LONGITUDE
Tff7b72from T7ee787mapviewT7ee787.T7ee787downloader Tff7b72import Te6edf3Downloader
Tff7b72from T7ee787mapviewT7ee787.T7ee787utils Tff7b72import Te6edf3clamp


Tff7b72class T56d364MapSourceTb4b4b4:
Te6edf3mt_key Tff7b72= Ta5d6ff"Ta5d6ffTUX5omZx8Sqgh9JDquwfTa5d6ff"
Te6edf3attribution_osm Tff7b72= Ta5d6ff'Ta5d6ff© OpenStreetMap contributorsTa5d6ff'
Te6edf3attribution_ve Tff7b72= Ta5d6ff'Ta5d6ff© VirtualEarthTa5d6ff'
Te6edf3attribution_mt Tff7b72= Ta5d6ff'Ta5d6ff© MapTiler © OpenStreetMap contributorsTa5d6ff'

T8b949e# list of available providers
T8b949e# cache_key: (is_overlay, minzoom, maxzoom, url, attribution)
Te6edf3providers Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6fftestingTa5d6ff"Tb4b4b4: Tb4b4b4(T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff19Tb4b4b4, Ta5d6ff"Ta5d6ffhttps://api.maptiler.com/maps/topo-v4/256/Tffd700{z}Ta5d6ff/Tffd700{x}Ta5d6ff/Tffd700{y}Ta5d6ff.png?key=Ta5d6ff"Tff7b72+Te6edf3mt_keyTb4b4b4, Te6edf3attribution_mtTb4b4b4, T79c0ff256Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffosmTa5d6ff"Tb4b4b4: Tb4b4b4(T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff19Tb4b4b4, Ta5d6ff"Ta5d6ffhttp://Tffd700{s}Ta5d6ff.tile.openstreetmap.org/Tffd700{z}Ta5d6ff/Tffd700{x}Ta5d6ff/Tffd700{y}Ta5d6ff.pngTa5d6ff"Tb4b4b4, Te6edf3attribution_osmTb4b4b4, T79c0ff256Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffmt_outdoorTa5d6ff"Tb4b4b4: Tb4b4b4(T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff19Tb4b4b4, Ta5d6ff"Ta5d6ffhttps://api.maptiler.com/maps/outdoor-v4/256/Tffd700{z}Ta5d6ff/Tffd700{x}Ta5d6ff/Tffd700{y}Ta5d6ff.png?key=Ta5d6ff"Tff7b72+Te6edf3mt_keyTb4b4b4, Te6edf3attribution_mtTb4b4b4, T79c0ff256Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffmt_topoTa5d6ff"Tb4b4b4: Tb4b4b4(T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff19Tb4b4b4, Ta5d6ff"Ta5d6ffhttps://api.maptiler.com/maps/topo-v4/256/Tffd700{z}Ta5d6ff/Tffd700{x}Ta5d6ff/Tffd700{y}Ta5d6ff.png?key=Ta5d6ff"Tff7b72+Te6edf3mt_keyTb4b4b4, Te6edf3attribution_mtTb4b4b4, T79c0ff256Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffmt_hybridTa5d6ff"Tb4b4b4: Tb4b4b4(T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff19Tb4b4b4, Ta5d6ff"Ta5d6ffhttps://api.maptiler.com/maps/hybrid-v4/256/Tffd700{z}Ta5d6ff/Tffd700{x}Ta5d6ff/Tffd700{y}Ta5d6ff.jpg?key=Ta5d6ff"Tff7b72+Te6edf3mt_keyTb4b4b4, Te6edf3attribution_mtTb4b4b4, T79c0ff256Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffvirtualearthTa5d6ff"Tb4b4b4: Tb4b4b4(T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff19Tb4b4b4, Ta5d6ff"Ta5d6ffhttp://ecn.t3.tiles.virtualearth.net/tiles/aTffd700{q}Ta5d6ff.jpeg?g=1Ta5d6ff"Tb4b4b4, Te6edf3attribution_veTb4b4b4, T79c0ff256Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffopentopoTa5d6ff"Tb4b4b4: Tb4b4b4(T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff17Tb4b4b4, Ta5d6ff"Ta5d6ffhttps://Tffd700{s}Ta5d6ff.tile.opentopomap.org/Tffd700{z}Ta5d6ff/Tffd700{x}Ta5d6ff/Tffd700{y}Ta5d6ff.pngTa5d6ff"Tb4b4b4, Te6edf3attribution_osmTb4b4b4, T79c0ff256Tb4b4b4)Tb4b4b4,
Tb4b4b4}

Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3urlTff7b72=Ta5d6ff"Ta5d6ffhttp://Tffd700{s}Ta5d6ff.tile.openstreetmap.org/Tffd700{z}Ta5d6ff/Tffd700{x}Ta5d6ff/Tffd700{y}Ta5d6ff.pngTa5d6ff"Tb4b4b4, Te6edf3cache_keyTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3min_zoomTff7b72=T79c0ff0Tb4b4b4, Te6edf3max_zoomTff7b72=T79c0ff19Tb4b4b4, Te6edf3tile_sizeTff7b72=T79c0ff256Tb4b4b4, Te6edf3image_extTff7b72=Ta5d6ff"Ta5d6ffpngTa5d6ff"Tb4b4b4, Te6edf3attributionTff7b72=Ta5d6ff"Ta5d6ff© OpenStreetMap contributorsTa5d6ff"Tb4b4b4,
Te6edf3subdomainsTff7b72=Ta5d6ff"Ta5d6ffabcTa5d6ff"Tb4b4b4, Te6edf3quad_key Tff7b72= Tff7b72FalseTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:

T8b949e# Possible cache hit, but very unlikely
Tff7b72if Te6edf3cache_key Tff7b72is Tff7b72NoneTb4b4b4: Te6edf3cache_key Tff7b72= Te6edf3hashlibTff7b72.Td2a8ffsha224Tb4b4b4(Te6edf3urlTff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf8Ta5d6ff"Tb4b4b4)Tb4b4b4)Tff7b72.Td2a8ffhexdigestTb4b4b4(Tb4b4b4)Tb4b4b4[Tb4b4b4:T79c0ff10Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffurl Tff7b72= Te6edf3url
Tff7b72selfTff7b72.Td2a8ffcache_key Tff7b72= Te6edf3cache_key
Tff7b72selfTff7b72.Td2a8ffmin_zoom Tff7b72= Te6edf3min_zoom
Tff7b72selfTff7b72.Td2a8ffmax_zoom Tff7b72= Te6edf3max_zoom
Tff7b72selfTff7b72.Td2a8fftile_size Tff7b72= Te6edf3tile_size
Tff7b72selfTff7b72.Td2a8ffimage_ext Tff7b72= Te6edf3image_ext
Tff7b72selfTff7b72.Td2a8ffattribution Tff7b72= Te6edf3attribution
Tff7b72selfTff7b72.Td2a8ffsubdomains Tff7b72= Te6edf3subdomains
Tff7b72selfTff7b72.Td2a8ffquad_key Tff7b72= Te6edf3quad_key
Tff7b72selfTff7b72.Td2a8ffcache_fmt Tff7b72= Ta5d6ff"Tffd700{cache_key}Ta5d6ff_Tffd700{zoom}Ta5d6ff_Tffd700{tile_x}Ta5d6ff_Tffd700{tile_y}Ta5d6ff.Tffd700{image_ext}Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffdp_tile_size Tff7b72= Tffa657minTb4b4b4(Te6edf3dpTb4b4b4(Tff7b72selfTff7b72.Td2a8fftile_sizeTb4b4b4)Tb4b4b4, Tff7b72selfTff7b72.Td2a8fftile_size Tff7b72* T79c0ff2Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdefault_lat Tff7b72= Tff7b72selfTff7b72.Td2a8ffdefault_lon Tff7b72= Tff7b72selfTff7b72.Td2a8ffdefault_zoom Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffbounds Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffcache_dir Tff7b72= Te6edf3kwargsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff'Ta5d6ffcache_dirTa5d6ff'Tb4b4b4, Te6edf3CACHE_DIRTb4b4b4)

Tf0883e@staticmethod
Tff7b72def Td2a8fffrom_providerTb4b4b4(Te6edf3keyTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Te6edf3quad_key Tff7b72= Te6edf3kwargsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff'Ta5d6ffquad_keyTa5d6ff'Tb4b4b4, Tff7b72FalseTb4b4b4)
Te6edf3provider Tff7b72= Te6edf3MapSourceTff7b72.Td2a8ffprovidersTb4b4b4[Te6edf3keyTb4b4b4]
Te6edf3cache_dir Tff7b72= Te6edf3kwargsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff'Ta5d6ffcache_dirTa5d6ff'Tb4b4b4, Te6edf3CACHE_DIRTb4b4b4)
Te6edf3options Tff7b72= Tb4b4b4{Tb4b4b4}
Te6edf3is_overlayTb4b4b4, Te6edf3min_zoomTb4b4b4, Te6edf3max_zoomTb4b4b4, Te6edf3urlTb4b4b4, Te6edf3attributionTb4b4b4, Te6edf3tile_size Tff7b72= Te6edf3providerTb4b4b4[Tb4b4b4:T79c0ff6Tb4b4b4]
Tff7b72if Tffa657lenTb4b4b4(Te6edf3providerTb4b4b4) Tff7b72> T79c0ff6Tb4b4b4: Te6edf3options Tff7b72= Te6edf3providerTb4b4b4[T79c0ff6Tb4b4b4:Tb4b4b4]
Tff7b72import T7ee787RNS T8b949e# TODO: Remove
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffPROVIDER: Tffd700{Te6edf3providerTffd700}Ta5d6ff"Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffOPTIONS: Tffd700{Te6edf3optionsTffd700}Ta5d6ff"Tb4b4b4)
Tff7b72return Te6edf3MapSourceTb4b4b4(Te6edf3cache_keyTff7b72=Te6edf3keyTb4b4b4, Te6edf3min_zoomTff7b72=Te6edf3min_zoomTb4b4b4, Te6edf3max_zoomTff7b72=Te6edf3max_zoomTb4b4b4,
Te6edf3urlTff7b72=Te6edf3urlTb4b4b4, Te6edf3cache_dirTff7b72=Te6edf3cache_dirTb4b4b4, Te6edf3attributionTff7b72=Te6edf3attributionTb4b4b4,
Te6edf3quad_keyTff7b72=Te6edf3quad_keyTb4b4b4, Te6edf3tile_sizeTff7b72=Te6edf3tile_sizeTb4b4b4, Tff7b72*Tff7b72*Te6edf3optionsTb4b4b4)

T8b949e# Get the x position on the map using this map source's projection
T8b949e# (0, 0) is located at the top left.
Tff7b72def Td2a8ffget_xTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3zoomTb4b4b4, Te6edf3lonTb4b4b4)Tb4b4b4:
Te6edf3lon Tff7b72= Te6edf3clampTb4b4b4(Te6edf3lonTb4b4b4, Te6edf3MIN_LONGITUDETb4b4b4, Te6edf3MAX_LONGITUDETb4b4b4)
Tff7b72return Tb4b4b4(Tb4b4b4(Te6edf3lon Tff7b72+ T79c0ff180.0Tb4b4b4) Tff7b72/ T79c0ff360.0 Tff7b72* Tffa657powTb4b4b4(T79c0ff2.0Tb4b4b4, Te6edf3zoomTb4b4b4)Tb4b4b4) Tff7b72* Tff7b72selfTff7b72.Td2a8ffdp_tile_size

T8b949e# Get the y position on the map using this map source's projection,
T8b949e# (0, 0) is located at the top left.
Tff7b72def Td2a8ffget_yTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3zoomTb4b4b4, Te6edf3latTb4b4b4)Tb4b4b4:
Te6edf3lat Tff7b72= Te6edf3clampTb4b4b4(Tff7b72-Te6edf3latTb4b4b4, Te6edf3MIN_LATITUDETb4b4b4, Te6edf3MAX_LATITUDETb4b4b4)
Te6edf3lat Tff7b72= Te6edf3lat Tff7b72* Te6edf3pi Tff7b72/ T79c0ff180.0
Tff7b72return Tb4b4b4( Tb4b4b4(T79c0ff1.0 Tff7b72- Te6edf3logTb4b4b4(Te6edf3tanTb4b4b4(Te6edf3latTb4b4b4) Tff7b72+ T79c0ff1.0 Tff7b72/ Te6edf3cosTb4b4b4(Te6edf3latTb4b4b4)Tb4b4b4) Tff7b72/ Te6edf3piTb4b4b4) Tff7b72/ T79c0ff2.0 Tff7b72* Tffa657powTb4b4b4(T79c0ff2.0Tb4b4b4, Te6edf3zoomTb4b4b4) Tb4b4b4) Tff7b72* Tff7b72selfTff7b72.Td2a8ffdp_tile_size

T8b949e# Get the longitude to the x position in the map source's projection
Tff7b72def Td2a8ffget_lonTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3zoomTb4b4b4, Te6edf3xTb4b4b4)Tb4b4b4:
Te6edf3dx Tff7b72= Te6edf3x Tff7b72/ Tffa657floatTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdp_tile_sizeTb4b4b4)
Te6edf3lon Tff7b72= Te6edf3dx Tff7b72/ Tffa657powTb4b4b4(T79c0ff2.0Tb4b4b4, Te6edf3zoomTb4b4b4) Tff7b72* T79c0ff360.0 Tff7b72- T79c0ff180.0
Tff7b72return Te6edf3clampTb4b4b4(Te6edf3lonTb4b4b4, Te6edf3MIN_LONGITUDETb4b4b4, Te6edf3MAX_LONGITUDETb4b4b4)

T8b949e# Get the latitude to the y position in the map source's projection
Tff7b72def Td2a8ffget_latTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3zoomTb4b4b4, Te6edf3yTb4b4b4)Tb4b4b4:
Te6edf3dy Tff7b72= Te6edf3y Tff7b72/ Tffa657floatTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdp_tile_sizeTb4b4b4)
Te6edf3n Tff7b72= Te6edf3pi Tff7b72- T79c0ff2 Tff7b72* Te6edf3pi Tff7b72* Te6edf3dy Tff7b72/ Tffa657powTb4b4b4(T79c0ff2.0Tb4b4b4, Te6edf3zoomTb4b4b4)
Te6edf3lat Tff7b72= Tff7b72-T79c0ff180.0 Tff7b72/ Te6edf3pi Tff7b72* Te6edf3atanTb4b4b4(T79c0ff0.5 Tff7b72* Tb4b4b4(Te6edf3expTb4b4b4(Te6edf3nTb4b4b4) Tff7b72- Te6edf3expTb4b4b4(Tff7b72-Te6edf3nTb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72return Te6edf3clampTb4b4b4(Te6edf3latTb4b4b4, Te6edf3MIN_LATITUDETb4b4b4, Te6edf3MAX_LATITUDETb4b4b4)

Tff7b72def Td2a8ffget_row_countTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3zoomTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3zoom Tff7b72== T79c0ff0Tb4b4b4: Tff7b72return T79c0ff1
Tff7b72return T79c0ff2 Tff7b72<< Tb4b4b4(Te6edf3zoom Tff7b72- T79c0ff1Tb4b4b4)

Tff7b72def Td2a8ffget_col_countTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3zoomTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3zoom Tff7b72== T79c0ff0Tb4b4b4: Tff7b72return T79c0ff1
Tff7b72return T79c0ff2 Tff7b72<< Tb4b4b4(Te6edf3zoom Tff7b72- T79c0ff1Tb4b4b4)

Tff7b72def Td2a8ffget_min_zoomTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4: Tff7b72return Tff7b72selfTff7b72.Td2a8ffmin_zoom
Tff7b72def Td2a8ffget_max_zoomTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4: Tff7b72return Tff7b72selfTff7b72.Td2a8ffmax_zoom

T8b949e# Add this tile to load within the downloader
Tff7b72def Td2a8fffill_tileTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3tileTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3tileTff7b72.Td2a8ffstate Tff7b72== Ta5d6ff"Ta5d6ffdoneTa5d6ff"Tb4b4b4: Tff7b72return
Te6edf3DownloaderTff7b72.Td2a8ffinstanceTb4b4b4(Te6edf3cache_dirTff7b72=Tff7b72selfTff7b72.Td2a8ffcache_dirTb4b4b4)Tff7b72.Td2a8ffdownload_tileTb4b4b4(Te6edf3tileTb4b4b4)

Tff7b72def Td2a8ffclear_prefetchesTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3DownloaderTff7b72.Td2a8ffinstanceTb4b4b4(Te6edf3cache_dirTff7b72=Tff7b72selfTff7b72.Td2a8ffcache_dirTb4b4b4)Tff7b72.Td2a8ffclear_prefetchesTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffprefetch_tileTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3zoomTb4b4b4, Te6edf3tile_xTb4b4b4, Te6edf3tile_yTb4b4b4)Tb4b4b4:
Te6edf3DownloaderTff7b72.Td2a8ffinstanceTb4b4b4(Te6edf3cache_dirTff7b72=Tff7b72selfTff7b72.Td2a8ffcache_dirTb4b4b4)Tff7b72.Td2a8ffprefetch_tileTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3zoomTb4b4b4, Te6edf3tile_xTb4b4b4, Te6edf3tile_yTb4b4b4)


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────